# -*- coding: UTF-8 -*-

"""
@author: 肥仔编程
@file:07.py
@time:2021-04-22
"""

"""
    字典/集合的使用
        1. 字典/集合的声明和访问
        2. 字典/集合中常用的方法 
"""

"""
    字典使用的总结
        声明： 变量名 = {键：值，键：值，键：值，键：值……}
        访问： 变量名[键]，注意如果键存在返回相应的值，如果不存在就会报错
        特点：
            不再使用下标进行访问、数据按照键值对的方式进行存储、字典和顺序无关，不能使用下标进行处理
        增加/修改： 变量名[键] = 值  如果字典中包含指定的键就对键的值进行修改，如果不包含就进行修改
        删除：
            del 变量名[键]     删除指定键对应的内容
            del 变量名         删除整个字典
            变量名.clear()     清除整个字典
        查询
            变量名.get(键, 默认值) ，如果存在指定键，返回相应的内容，如果不存在返回默认值，如果省略，则返回 None
            变量名.values() 返回字典中所有的值
            变量名.items()  返回可迭代内容，具体数据为元组 
"""
# 声明字典
user = {"name":"唐僧", "sex":"男", "age":"12", "work":"师傅"}

# 字典内容的访问
print(user["name"])

# 增加或者修改字典内容
# 字典中不允许重复，所以在没有指定键对应的内容就增加，有的话进行修改
user["alisa"] = "御弟哥哥"
print(user)

# 删除指定字典内容
del user["alisa"]
print(user)

# 清空字典，清空之后可以继续访问
user.clear()
print(user)

# 删除字典，删除之后无法访问
del user
print(user)

# 注意，默认值可以输入U也可以不输入
# 输入默认值，在没有找到的时候会返回指定的默认值
# 不输入默认值，在没有找到的时候会返回 None
print(user.get("name", "未找到相关内容"))
print(user.get("names", "未找到相关内容"))
print(user.get("names"))

print("打印出所有的键")
for key in user.keys():
    print(key, end="\t")

print("\n打印出所有的值")
for val in user.values():
    print(val, end="\t")

print("\n打印出键和值")
for key, val in user.items():
    print(key + " : " + val)

"""
    集合的使用
        可以使用 {} 或者 set() 来创建集合，但注意创建空集合必须使用 set(), {}表示的字典
        特点： 自动去除重复的数据、顺序是随机的，不支持采用下标的方式访问
    声明： 变量名 = {1， 3， 4， 2，5}、 变量名 = set()
    添加： 变量名.add(数据) 注意集合可以自动去重，所以如果添加的内容在集合中已经存在不会有任何的变化
    追加： 变量名.update(序列) ，其中的参数可以是列表、字符串、元组
    删除
        变量名.remove(数据) 删除数据，如果数据不存在会报错
        变量名.dicard(数据) 删除数据，如果数据不存在不会报错
        变量名.prop() 删除数据并返回这个数据
    数据检查
        数据 in 变量名 判断是否在集合中，如果在返回 True，不是返回 False
        数据 not in 变量名 判断是否在集合中，如果在返回 False，不是返回 True

    set(序列) 将元组或者列表转化为集合
"""

"""
    推导式
"""
# 一般方式添加列表内容
nums = []
for num in range(0, 11):
    nums.append(num)
print(nums)
# 使用推导式添加列表内容
nums = [num for num in range(0, 11)]
print(nums)

# 字典的推导式
keys = ["name", "sex", "age"]
vals = ["张三", "男", 12]
user = {keys[item] : vals[item] for item in range(len(keys))}
print(user)


"""
    序列总结
        定义：一个存放多个值的连续内存空间
        有序序列，可以使用下标进行访问，也可以使用切片进行处理，比如列表、元组、字符串都是
        无序序列，和有序序列相反，无法使用下标访问，具体就是字典、集合

        可变序列，元素可以进行更新操作，更改之后地址不会变，这样的成为是可变序列，否则就是不可变序列
        可变的： 字典、列表、集合
        不可变： 整型、浮点型、字符串、元祖
"""
